package StringBuilder和StringBuffer.StringBuilder的介绍;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-20
 * Time: 13:20
 */
/*
StringBuilder的介绍
由于String的不可更改特性，为了方便字符串的修改，Java中又提供StringBuilder和StringBuffer类。这两个类大
部分功能是相同的，这里介绍 StringBuilder常用的一些方法，其它需要用到了大家可参阅
 */
public class Test {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("hello");
        String str = sb.toString();
        System.out.println(str);
    }
    public static void main3(String[] args) {
        String str = "hello";
        StringBuilder sb = new StringBuilder(str);//使用构造方法
        //或者
        StringBuilder sb2 = new StringBuilder();
        System.out.println(sb2.append(str));//使用append方法
    }
    public static void main2(String[] args) {
        StringBuilder sb1 = new StringBuilder("hello");
        StringBuilder sb2 = sb1;

        //追加：即尾插 ->字符、字符串、整型数字
        sb1.append(' ');//hello
        sb1.append("world");//hello world
        sb1.append(123);//hello world123
        System.out.println(sb1);//hello world123
        System.out.println(sb1 == sb2);//true
        System.out.println("===========================");


        System.out.println(sb1.charAt(0));//获取0号位上的字符 h
        System.out.println(sb1.length());//获取字符串的有效长度14
        System.out.println(sb1.capacity());//获取底层数组的总大小
        System.out.println("===========================");

        sb1.setCharAt(0, 'H');//设置任意位置的字符 Hello world123
        sb1.insert(0, "Hello world!!!");//Hello world!!!Hello world123
        System.out.println(sb1);
        System.out.println(sb1.indexOf("Hello"));//获取Hello第一次出现的位置
        System.out.println(sb1.lastIndexOf("hello"));//获取hello最后一次出现的位置
        System.out.println("===========================");


        sb1.deleteCharAt(0);//删除首字符
        sb1.delete(0,5);//删除[0, 5)范围内的字符
        String str = sb1.substring(0, 5);//截取[0, 5)区间中的字符以String的方式返回
        System.out.println(str);
        System.out.println("===========================");


        sb1.reverse();//字符串逆转
        str = sb1.toString();//将StringBuffer以String的方式返回
        System.out.println(str);
    }
}

/*
执行结果：
hello world123
true
===========================
h
14
21
===========================
Hello world!!!Hello world123
0
-1
===========================
world
===========================
321dlrow olleH!!!dlrow
 */

/*
从上述的例子可以看出：String和StringBuilder最大的区别在于String的内容无法修改，而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。

注意：String和StringBuilder不能直接转换。如果想要互相转换，可以采用如下原则：
- String变成StringBuilder：利用StringBuilder的构造方法或者append()方法

String str = "hello";
StringBuilder sb = new StringBuilder(str);//使用构造方法
//或者
StringBuilder sb2 = new StringBuilder();
sb2.append(str);//使用append方法

- StringBuilder变成String：调用toString()方法。

StringBuilder sb = new StringBuilder("hello");
String str = sb.toString();
 */